22. 连接到百度天工物接入

您所在的位置:网站首页 lwip应用开发实战指南 pdf 22. 连接到百度天工物接入

22. 连接到百度天工物接入

2024-05-14 12:44| 来源: 网络整理| 查看: 265

22. 连接到百度天工物接入¶ 22.1. 物接入简介¶

物接入(IoT Hub)是面向物联网领域开发者的全托管云服务,通过主流的物联网协议(如MQTT)进行通信,可以在智能设备与云端之间建立安全的双向连接,快速实现物联网项目。支持亿级并发连接和消息数,支持海量设备与云端安全可靠的双向连接,无缝对接天工平台和百度云的各项产品和服务。

物接入分为设备型和数据型两种项目类型,我们在这里使用数据型项目类型,传输一些温湿度数据,同时可以无缝对接时序数据库TSDB、物可视等,将数据实时显示出来,同时我们采用MQTT协议与云端进行通讯。

22.2. 使用IoT Hub¶ 22.2.1. 创建计费套餐¶

在使用物接入服务前,必须要创建一个百度云账号用于管理我们的设备,所有的设备信息都是在云端后台进行管理的,地址:https://console.bce.baidu.com/iot2/hub/。

在使用IoT Hub之前应先创建计费套餐并设定每个月收发消息的流量额度,每个用户只能创建一个计费套餐,所有项目将共享该套餐的额度,目前IoT Hub的计费是很便宜的,每个月的前1000000条消息是免费的,更多的消息数量请自行参考IoT Hub的收费说明,因此我们用它来做实验早已足够,计算一下,假设我们的开发板在一个月内不间断以3秒的频率发送一次消息到IoT Hub,那么一个月只能发送30*24*60*(60/3) = 864000,还不到1000000条呢,因此这个流量用来做实验早就绰绰有余,即使这个月用完了流量, 下个月还有1000000条,只要当月没超出这个流量都是可以免费使用,具体见 图22_1。

图 22‑1创建计费套

22.2.2. 创建项目¶

IoT Hub是用于物联网设备的后台管理的,将设备接入IoT Hub的第二步就是创建一个项目,每个项目会对应一个接入点(endpoint),一个项目就表示一个完整的物接入服务,首先登录物接入控制台页面:https://console.bce.baidu.com/iot2/hub/project/list,点击“创建项目”,填写需要创建 IoT Hub 服务的项目名称、选择项目类型为数据型,并提交即可,创建的项目,默认具有多种通信方式, 我们暂时只关注TCP连接方式即可,因为开发板是采用MQTT协议与云端交互的,端口号是1883, 具体见 图22_1 与 图22_3。

此处补充说明一点:通过项目可以将不同项目的设备进行隔离和管理,一个项目下允许有多个用户(设备),用户与身份进行绑定,而每个身份需要绑定一个策略,而策略下可以创建多个不同的主题,因此一个设备可以订阅多个不同的主题,并且同一个项目下的主题是共享的,所有的设备均可进行订阅。

图 22‑2创建项目

图 22‑3创建完成

22.2.3. 创建策略¶

首先我们点击“fire_temp_hum”项目,进入项目里面,首先创建一个策略(简单来说就是主题), 输入对应的名称与主题,选择发布与订阅权限,当创建完成后,项目下的设备就可以订阅这个主题,具体见 图22_4。

图 22‑4创建策略

22.2.4. 创建身份与创建用户¶

身份是开发板连接IoT Hub的重要途径,这里面包含了秘钥,标识着开发板能否通过IoT Hub的验证,这也是安全保障的主要操作,首先点击“身份列表”,再点击“创建身份”,然后根据自己的信息进行填写, 在这里要注意的是需要勾选密码验证,再选择之前我们创建的策略进行绑定(如果没有则必须创建), 当身份创建完成时候生成的秘钥是用于开发板连接IoT Hub的必要条件,记住不能丢失,如果丢失了就找不回来了,在创建的时候就把它保存好,具体见 图22_6。

在创建用户的时候,只需要把用户名设置好,然后再绑定身份即可,这样子一个设备就对应到云端了, 并且可以向策略中设置的主题发布消息和订阅主题,具体见 图22_5。

图 22‑5创建用户并绑定身份

图 22‑6创建身份

当所有的东西都创建完成,我们点击身份操作中的“测试连接”,在网页上测试一下我们能不能正常进行MQTT通信、发布与定阅主题, 在页面中输入刚刚保存的秘钥,点击“connect”进行连接测试,如果前面的步骤全部做完,并且秘钥是正确的, 就可以发现我们的连接是正常的,然后我们订阅一下之前创建策略时候的主题名字“temp&hum”,再向这个主题发送一个消息, 消息的内容由自己定义,具体见 图22_7。

图 22‑7测试连接

22.2.5. MQTT软件测试连接¶

仔细观察的同学可能会发现,这个连接的端口是8884,因为这是在网页上测试连接的,所以端口不一样是正常的,那么我们也可以使用MQTT客户端软件进行连接测试,首先在我们论坛中提供的资料下载客户端软件,http://www.firebbs.cn/forum.php?mod=viewthread&tid=26274&fromuid=37393,然后进行安装,就可以利用软件当做客户端去测试连接天工物接入平台,MQTT.fx是一款基于Eclipse Paho,使用Java语言编写的MQTT客户端工具,支持通过Topic订阅和发布消息。 打开软件,点击设置,来配置客户端的基本信息,填写用户名与密码,进行连接,具体见 图22_8

图 22‑8配置MQTT客户端软件

配置完成之后,可以尝试连接,点击Connetc,当连接成功后,下面的Publish与Subscribe等选项是可以选择的, 那么我们点击订阅选项Subscribe,输入订阅的主题,然后点击subscribe,可以发现已经成功订阅, 具体见 图22_9,但是此时还未有消息,因此我们需要去Publish选项中向这个主题发布消息, 当发布成功后,订阅的主题就会回显出服务器发送给客户端的消息, 具体见 图22_10。

图 22‑9订阅主题

图 22‑10发布消息与收到消息

这样子说明我们已经能正常连接到百度天工物了,下一步就是使用开发板进行连接测试。

22.3. 开发板连接IoT Hub¶

首先拿到上一章移植好的例程,打开mqttclient.h文件,配置连接的参数,如服务器域名(此处需要开启DNS 域名解析功能),然后配置端口号、用户名与秘钥(这里的秘钥是自己的,根据实际情况进行配置),配置订阅的主题等信息,具体见 代码清单22_1。

代码清单 22‑1mqttclient.h的宏定义配置

#ifdef LWIP_DNS #define HOST_NAME "rvmbdy8.mqtt.iot.gz.baidubce.com" //服务器域名 #else #define HOST_NAME "14.215.190.20" //服务器IP地址 #endif //#define HOST_IP "129.204.201.235" #define HOST_PORT 1883 //由于是TCP连接,端口必须是1883 #define CLIENT_ID "client_ID" //随机的id #define USER_NAME "rvmbdy8/stm32f4" //用户名 #define PASSWORD "9EeVCRrCN5i6XXXX" //秘钥 #define TOPIC "temp&hum" //订阅的主题 #define TEST_MESSAGE "test_message" //发送测试消息

然后开始连接到云平台,首先我们介绍一下我们提供的封装代码,看看MQTT客户端是怎么连接到云平台的,具体见 代码清单22_2。

代码清单 22‑2连接到云平台

void Client_Connect(void) { char* host_ip; #ifdef LWIP_DNS ip4_addr_t dns_ip; netconn_gethostbyname(HOST_NAME, &dns_ip); (1) host_ip = ip_ntoa(&dns_ip); PRINT_DEBUG("host name : %s , host_ip : %s\n",HOST_NAME,host_ip); #else host_ip = HOST_NAME; #endif MQTT_START: //创建网络连接 PRINT_DEBUG("1.开始连接对应云平台的服务器...\n"); PRINT_DEBUG("服务器IP地址:%s,端口号:%0d!\n",host_ip,HOST_PORT); while (1) { //连接服务器 MQTT_Socket = transport_open((int8_t*)host_ip,HOST_PORT); (2) //如果连接服务器成功 if (MQTT_Socket >= 0) { PRINT_DEBUG("连接云平台服务器成功!\n"); break; } PRINT_DEBUG("连接云平台服务器失败,等待3秒再尝试重新连接!\n"); //等待3秒 vTaskDelay(3000); } PRINT_DEBUG("2.MQTT用户名与秘钥验证登陆...\n"); //MQTT用户名与秘钥验证登陆 if (MQTT_Connect() != Connect_OK) (3) { //重连服务器 PRINT_DEBUG("MQTT用户名与秘钥验证登陆失败...\n"); //关闭链接 transport_close(); goto MQTT_START; } //订阅消息 PRINT_DEBUG("3.开始订阅消息...\n"); //订阅消息 if (MQTTSubscribe(MQTT_Socket,(char *)TOPIC,QOS1) =0:发送成功


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3